Android 一行代码接入扫码功能 (扫码/生成码) 您所在的位置:网站首页 java生成 二维码样式圆形 Android 一行代码接入扫码功能 (扫码/生成码)

Android 一行代码接入扫码功能 (扫码/生成码)

2024-03-01 09:35| 来源: 网络整理| 查看: 265

最新更新

版本: V2.0.1

更新日志:

1.部分变量、方法名 重命名 ( 如遇到升级版本后方法名找不到 可参考 使用文档:18390826440.3vkj.club/ )。 2.解决扫码成功后音频播放多次问题。 3.Camera库升级、适配Android13。 5.识别速度、准确率优化。 4.代码结构优化。 6.增加识别多个二维码。

微信图片_20230528171836.jpg

微信图片_20230528171828.jpg

正文:

他来了,他来了,他带着YXing走来了。 YXing 集成了CameraX + zxing, 简洁调用,功能完善,自定义扫码界面,再也不用像以前一样cv一堆冗余的Camera代码进项目了。 001.jpg

怎么集成: 1.在根目录的build.gradle或settings.gradle中添加jitpack依赖 :

repositories { maven { url "https://jitpack.io" } }

2.在project的build.gradle中添加YXing依赖:

implementation 'com.github.amggg:YXing:V2.0.1'

功能: 1、扫描二维码(单个/多个)、条形码。 2、生成二维码,带logo二维码 、条形码。 3、识别相册内条形码、二维码图片。

注意事项: 1.在进入扫码界面前, 自行动态请求相机权限。 2.minSdk >= 21 (android5.0 及以上)。 3.AndroidX。

如何使用: 1.简单调用: Activity中启动:

ScanCodeConfig.create(MainActivity.this) //设置扫码页样式 ScanStyle.NONE:无 ScanStyle.QQ :仿QQ样式 ScanStyle.WECHAT :仿微信样式 ScanStyle.CUSTOMIZE : 自定义样式 .setStyle(style) //扫码成功是否播放音效 true : 播放 false : 不播放 .setPlayAudio(false) .buidler() //跳转扫码页 扫码页可自定义样式 .start(ScanCodeActivity.class);

Fragment中启动:

ScanCodeConfig.create(MainActivity.this, mFragment) //设置扫码页样式 ScanStyle.NONE:无 ScanStyle.QQ :仿QQ样式 ScanStyle.WECHAT :仿微信样式 ScanStyle.CUSTOMIZE : 自定义样式 .setStyle(style) //扫码成功是否播放音效 true : 播放 false : 不播放 .setPlayAudio(false) .buidler() //跳转扫码页 扫码页可自定义样式 .start(ScanCodeActivity.class);

获取扫码结果:

@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && data != null) { switch (requestCode) { case ScanCodeConfig.QUESTCODE: //接收扫码结果 Bundle extras = data.getExtras(); if (extras != null) { int codeType = extras.getInt(ScanCodeConfig.CODE_TYPE); String code = extras.getString(ScanCodeConfig.CODE_KEY); tvCode.setText(String.format( "扫码结果:\n" + "码类型: %s \n" + "码值 : %s", codeType == 0 ? "一维码" : "二维码", code)); } break; case ALBUM_QUEST_CODE: //接收图片识别结果 String code = ScanCodeConfig.scanningImage(this, data.getData()); tvCode.setText(String.format("识别结果: %s", code)); break; default: break; } } }

内置两种样式可供使用, 通过setStyle方法 设置。 1、仿 QQ p002.jpg

2、仿微信 p003.jpg

通过设置style 为 ScanStyle.CUSTOMIZE 进行自定义样式设计:

ScanCodeConfig.create(MainActivity.this) //设置扫码页样式 ScanStyle.NONE:无 ScanStyle.QQ :仿QQ样式 ScanStyle.WECHAT :仿微信样式 ScanStyle.CUSTOMIZE : 自定义样式 .setStyle(ScanStyle.CUSTOMIZE) //扫码成功是否播放音效 true : 播放 false : 不播放 .setPlayAudio(true) //设置音效音频 .setAudioId(R.raw.beep) //////////////////////////////////////////// //以下配置 在style为 ScanStyle.CUSTOMIZE 时生效 //设置扫码框位置 left : 边框左边位置 top : 边框上边位置 right : 边框右边位置 bottom : 边框下边位置 单位/dp // .setScanRect(new ScanRect(50, 200, 300, 450), false) //是否限制识别区域为设定扫码框大小 true:限制 false:不限制 默认false:识别区域为整个屏幕 .setLimitRect(true) //设置扫码框位置 scanSize : 扫码框大小 offsetX : x轴偏移量 offsetY :y轴偏移量 单位 /px .setScanSize(600, 0, 0) //是否显示边框上四个角标 true : 显示 false : 不显示 .setShowFrame(true) //设置边框上四个角标颜色 .setFrameColor(R.color.whilte) //设置边框上四个角标圆角 单位 /dp .setFrameRadius(2) //设置边框上四个角宽度 单位 /dp .setFrameWith(4) //设置边框上四个角长度 单位 /dp .setFrameLength(15) //设置是否显示边框外部阴影 true : 显示 false : 不显示 .setShowShadow(true) //设置边框外部阴影颜色 .setShadeColor(R.color.black_tran30) //设置扫码条运动方式 ScanMode.REVERSE : 往复运动 ScanMode.RESTART :重复运动 默认ScanMode.RESTART .setScanMode(ScanMode.REVERSE) //设置扫码条扫一次时间 单位/ms 默认3000 .setScanDuration(3000) //设置扫码条图片 .setScanBitmapId(R.mipmap.scan_wechatline) ////////////////////////////////////////////// ////////////////////////////////////////////// //以下配置在 setIdentifyMultiple 为 true 时生效 //设置是否开启识别多个二维码 true:开启 false:关闭 开启后识别到多个二维码会停留在扫码页 手动选择需要解析的二维码后返回结果 .setIdentifyMultiple(isMultiple) //设置 二维码提示按钮的宽度 单位:px .setQrCodeHintDrawableWidth(120) //设置 二维码提示按钮的高度 单位:px .setQrCodeHintDrawableHeight(120) //设置 二维码提示按钮的Drawable资源 // .setQrCodeHintDrawableResource(R.mipmap.in) //设置 二维码提示Drawable 是否开启缩放动画效果 .setStartCodeHintAnimation(true) //设置 二维码选择页 背景透明度 .setQrCodeHintAlpha(0.5f) ////////////////////////////////////////////// .buidler() //跳转扫码页 扫码页可自定义样式 .start(MyScanActivity.class);

p004.jpg

由于扫码界面一般会有很多不同的业务逻辑,所以可以根据需求自定义扫码界面:

自定义扫码界面流程: 1.新建Activity 继承 ScanCodeActivity

public class MyScanActivity extends ScanCodeActivity

2.重写getLayoutId() 和 initData() 方法 getLayoutId返回你自己定义的布局文件id initData() 和平常一样 初始化数据 监听等等

public class MyScanActivity extends ScanCodeActivity { private AppCompatButton btnOpenFlash; @Override public int getLayoutId() { return R.layout.activity_myscan; } @Override public void initData() { super.initData(); btnOpenFlash = findViewById(R.id.btn_openflash); btnOpenFlash.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { isOpenFlash = !isOpenFlash; setFlashStatus(isOpenFlash); btnOpenFlash.setText(isOpenFlash ? "关闭闪光灯" : "打开闪光灯"); } }); } }

3.布局文件中先将下面代码复制进去:

PreviewView是扫码界面, 下面可以任意添加自己的布局了: 下面尝试一下:

4.start()方法参数 替换成自定义的Activity:

ScanCodeConfig.create(MainActivity.this) //设置扫码页样式 ScanStyle.NONE:无 ScanStyle.QQ :仿QQ样式 ScanStyle.WECHAT :仿微信样式 .setStyle(style) //扫码成功是否播放音效 true : 播放 false : 不播放 .setPlayAudio(true) .buidler() //跳转扫码页 扫码页可自定义样式 .start(MyScanActivity.class);

5.在AndroidManifest.xml中 为MyScanActivity 添加configChanges属性 防止屏幕销毁重建造成异常

预览一下: p005.jpg

除了扫码功能外,还可以生成二维码: 1.单独的二维码:

Bitmap bitmap = ScanCodeConfig.createQRCode("star");

2.带logo的二维码:

Bitmap bitmap = ScanCodeConfig.createQRCodeWithLogo("star", BitmapFactory.decodeResource(getResources(), R.mipmap.timg));

3.生成带描边logo二维码

Bitmap bitmap = ScanCodeConfig.createQRCodeWithStrokeLogo("star", SizeUtils.dp2px(getApplicationContext(), 200), BitmapFactory.decodeResource(getResources(), R.mipmap.timg), SizeUtils.dp2px(getApplicationContext(), 60), SizeUtils.dp2px(getApplicationContext(), 60), SizeUtils.dp2px(getApplicationContext(), 10), SizeUtils.dp2px(getApplicationContext(), 10), SizeUtils.dp2px(getApplicationContext(), 2), ContextCompat.getColor(MainActivity.this, R.color.colorAccent));

二维码宽高, logo宽高, 圆角都可以自行设置:

/** * 生成二维码 * * @param text 需要生成二维码的文字、网址等 * @param size 需要生成二维码的大小() * @return bitmap */ public static Bitmap createQRCode(String text, int size) { /** 生成带logo 二维码 * @param text 文字 * @param size 二维码大小 1 :1 * @param logo logo * @param logoWith logo宽 * @param logoHigh logo高 * @param logoRaduisX logo x圆角 * @param logoRaduisY logo y圆角 * @return */ public static Bitmap createQRCodeWithLogo(String text, int size, Bitmap logo, int logoWith, int logoHigh, float logoRaduisX, float logoRaduisY){ /** 生成带描边logo 二维码 * @param text 文字 * @param size 二维码大小 1 :1 * @param logo logo * @param logoWith logo宽 * @param logoHigh logo高 * @param logoRaduisX logo x圆角 * @param logoRaduisY logo y圆角 * @param storkWith 描边宽度 * @param storkColor 描边颜色 * @return */ public static Bitmap createQRCodeWithStrokeLogo(String text, int size, Bitmap logo, int logoWith, int logoHigh, float logoRaduisX, float logoRaduisY, int storkWith, int storkColor){

除了生成二维码, 从相册识别二维码也是必不可少的: 调用以下方法, 把选中的图片uri传进去 就可以获取到二维码的内容了。。

/** * 解码uri二维码图片 * @return */ public static String scanningImage(Activity mActivity, Uri uri) { /** * 解码bitmap二维码图片 * @return 解码内容 */ public static String scanningImageByBitmap(Bitmap srcBitmap) {

4.生成条形码

Bitmap barCode = ScanCodeConfig.createBarCode("234323423423", 500, 200, false);

可配置条形码的宽高,是否在条码下方显示内容。 注意:条码内容不可为 中文。

/** * 生成条形码 * @param content 要生成条形码包含的内容 * @param widthPix 条形码的宽度 * @param heightPix 条形码的高度 * @param isShowContent 是否显示条形码包含的内容 * @return 返回生成条形的位图 */ public static Bitmap createBarcode(String content, int widthPix, int heightPix, boolean isShowContent) {

打完 收工~~~

github 内有app 下载链接 微信图片_20230604174940.jpg

技术不强, 重在整理, 不喜勿喷。

附上github链接:github.com/amggg/YXing

star star star



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有